package cn.wolfcode.wolf2w.job;


import cn.wolfcode.wolf2w.domain.StrategyStatisVO;
import cn.wolfcode.wolf2w.redis.IStrategyRedisService;
import cn.wolfcode.wolf2w.redis.IVisitorRedisService;
import cn.wolfcode.wolf2w.service.IStrategyService;
import cn.wolfcode.wolf2w.service.IVisitorsService;
import cn.wolfcode.wolf2w.util.RedisKeys;
import cn.wolfcode.wolf2w.util.VisitorVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/*
* redis数据持久化操作
* */
@Component
public class RedisDataPersistenceJob {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Autowired
    private IStrategyService strategyService;

    @Autowired
    private IStrategyRedisService strategyRedisService;

    @Autowired
    private IVisitorRedisService visitorRedisService;

    @Autowired
    private IVisitorsService visitorsService;

    /**
     * @Scheduled  用来设置定时任务标签
     * cron用来设置定时表达式(指定定时规则)
     * 　Cron表达式是一个字符串，字符串以5或6个空格隔开，分为6或7个域，每一个域代表一个含义
     *  //秒 分 小时 月份中的日期 月份 星期中的日期 年份
     *
     */
    @Scheduled(cron="0/10 * * * * ?")
    public void RedisDataPersistenceJob(){
     //持久化操作就是将redis中的数据存入到mongodb中
        //1先查询出redis中vo对象的数据
        List<StrategyStatisVO> vos = strategyRedisService.queryStrategyRedisByPattern("*");

        //遍历vo对象,获取对应的数据,更新到mongodb数据库中
        for (StrategyStatisVO vo : vos) {
            strategyService.updateStrategyVo(vo);
        }

        //访客数据久化：查询redis中访客的vo对象数据
        List<VisitorVo> visitorVo = visitorRedisService.queryVisitorRedisByPattern("*");
        for (VisitorVo vo : visitorVo) {
            visitorsService.updateVisitorVo(vo);
        }
    }
}
